import axios from 'axios'
import { ElMessage } from 'element-plus'
import store from '@/store'
import router from '@/router'
import { BASE_URL, TOKEN_NAME } from '@/config/setting.config.js'

// 创建axios实例
const service = axios.create({
    baseURL: BASE_URL,
    timeout: 5000 // 请求超时时间
})

// request拦截器
service.interceptors.request.use(config => {
    let token = store.getters['user/getToken'];
    if (token) {
        // 让每个请求携带token 请根据实际情况自行修改
        config.headers[TOKEN_NAME] = token
    }
    return config
}, error => {
    console.log('utils.request.request.error', error)
    Promise.reject(error)
})
  
// respone拦截器
service.interceptors.response.use(
    (response) => {
        //HTTP状态码, 请根据实际情况自行修改
        switch(response.status) {
            case 200:
                break;
            default:
                ElMessage.error('请求状态码(' + response.statusText + ")");
                console.log('utils.request.response', response);
                return Promise.reject('error');
        }

        const res = response.data;
        //后端返回的状态码, 请根据实际情况自行修改
        switch(res.code) {
            case 200:
                break;
            case 401:
                ElMessage.error('未登录(' + res.msg + ")")
                store.dispatch('user/exit');
                router.push('/login')
                break;
            case 402:
                ElMessage.error('操作失败(' + res.msg + ")")
                break;
            case 403:
                ElMessage.error('无权限(' + res.msg + ")")
                break;
            case 404:
                ElMessage.error('资源不存在(' + res.msg + ")")
                break;
            case 500:
                ElMessage.error('服务器内部错误(' + res.msg + ")")
                break;
            default:
                ElMessage.error('其他错误(' + res.msg + ")")
        }
        return res;
    },
    (error) => {
        ElMessage.error('请求错误（' + error + ")");
        console.log('utils.request.error', error)
        return Promise.reject(error)
    }
)

export const request = (config)=>{
    return service(config);
}